home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Amiga Amateur Radio User Group
/
AARUG UK #29 (199x)(Amiga Amateur Radio User Group UK)(PD)[G4DCV].zip
/
AARUG UK #29 (199x)(Amiga Amateur Radio User Group UK)(PD)[G4DCV].adf
/
plan10-13
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1978-01-09
|
10KB
|
376 lines
REM AO10-13 Satellite Tracker
WINDOW 2,"output",,15
top:
CLS:PRINT
PRINT" ***********************************************
PRINT
PRINT" * AO10-13 Satellite Tracker for AMIGA *"
PRINT
PRINT" * Based on Plan 10-13 V3.0 (c) 1985 *"
PRINT
PRINT" * By James Miller *"
PRINT
PRINT" * Modified by VK6KHD 1989 for AMIGA *"
PRINT
PRINT" **A $10 Donation to AMSAT Aust if used please**"
PRINT
PRINT" Do you wish to update ?"
PRINT
PRINT" 1. Satellite Data"
PRINT
PRINT" 2. Location Data"
PRINT
PRINT" Else press space bar"
getkey:
C$=INKEY$
IF C$=""THEN GOTO getkey
x=VAL(C$)
ON x GOTO jump1,jump2
start:
DD$="MONTUEWEDTHUFRISATSUNMON"
OPEN "I",#2,"df0:satellites/satdata/LOCATION"
INPUT#2,LC$,LA,LO,HT
CLOSE#2
GOSUB SETUPVAR
OPEN "I",#2,"DF0:satellites/satdata/menudata"
INPUT#2,m1$,m2$,m3$,m4$,m5$,m6$,m7$,m8$
CLOSE#2
CLS:PRINT :PRINT
PRINT" Satellite Calculations" :PRINT
PRINT" 1. ";m1$;TAB(35);"5. ";m5$
PRINT
PRINT" 2. ";m2$;TAB(35);"6. ";m6$
PRINT
PRINT" 3. ";m3$;TAB(35);"7. ";m7$
PRINT
PRINT" 4. ";m4$;TAB(35);"8. ";m8$
PRINT
PRINT" Your choice? (1-8 only)"
loop:
aa$=INKEY$
IF aa$="" THEN GOTO loop
IF VAL(aa$)>8 THEN GOTO loop
satno$="DF0:satellites/satdata/sat "+aa$
OPEN "I",#2,satno$
INPUT#2,sat$,ye,TE,IN,RA,EC,WP,MA,MM,m2,RV,A,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,LT,LN
CLOSE#2
IF ye<1000 THEN : CLS : GOTO start
GOSUB SETUP
GOSUB TITLE
PRINT" Please enter the following:"
PRINT
INPUT" Date (DD,MM,YY) : ",DA,M,Y:YZ=Y
INPUT" Duration (Day/s) : ",DZ
INPUT" Time step,minutes(0-60): ",TD
DATA 0,31,59,90,120,151,181,212,243,273,304,334,365
F9=0:IF Y/4=INT(Y/4) THEN F9=1
RESTORE: FOR Q=1 TO M : READ D9 : NEXT Q
SD=D9+DA:IF M>2 THEN SD=SD+F9
SZ=SD+DZ-1
PRINT
PRINT" ";DA;"/";M;"/";Y" Equates to day#: ";SD
PRINT
PRINT" Hard copy requred Y/N ?"
loop2:
QA$=INKEY$
IF QA$="" THEN GOTO loop2
QA$=UCASE$(QA$)
IF QA$="N" THEN GOTO CALCS
IF QA$<>"Y" THEN GOTO loop2
LPRINT
LPRINT CHR$(14);sat$;" FOR:- ";LC$
LPRINT:LPRINT "Visible passes starting at 0000 UTC ";DA;"/";M;"/";Y
LPRINT:LPRINT "Satellite attitude used on this printout is lat=";RD*LT;
LPRINT " lon=";RD*LN
LPRINT:LPRINT"Print out run on ";MID$(DATE$,4,2);"/";LEFT$(DATE$,2);"/";RIGHT$(DATE$,2);" at ";LEFT$(TIME$,5)
CALCS:
CLS:PRINT:PRINT :PRINT :PRINT :PRINT
PRINT" ***** CALCULATING *****":PRINT
PRINT" Seeking visible passes"
YR=1900+Y
FOR DY=SD TO SZ
FOR HR=0 TO 23
FOR MIN= 0 TO 59 STEP TD
TN=DY+(HR+MIN/60)/24
GOSUB SATVEC
GOSUB RANGEVEC
GOSUB SUNVEC
IF EL>-3 THEN GOSUB DATAOUT
NEXT:NEXT:NEXT
PRINT :PRINT
PRINT" Do you wish to continue (C), change QTH"
PRINT
PRINT" or satellite data (D), or exit Plan10-13 (E)"
loop8:
yn$=INKEY$
IF yn$="" THEN GOTO loop8
yn$=UCASE$(yn$)
IF yn$="C" THEN GOTO start
IF yn$="D" THEN GOTO top
WINDOW CLOSE 2:SYSTEM
SETUP:
LA=LA*DR:LO=LO*DR:HT=HT/1000
CL=COS(LA):SL=SIN(LA):CO=COS(LO):SO=(LO)
RE=6378.14:FL=1/298.257
RP=RE*(1-FL):XX=RE*RE:ZZ=RP*RP
D=SQR(XX*CL*CL+ZZ*SL*SL)
RX=XX/D+HT:RZ=ZZ/D+HT
UX=CL*CO:EX=-SO:NX=-SL*CO
UY=CL*SO:EY=CO:NY=-SL*SO
UZ=SL:EZ=0:NZ=CL
OX=RX*UX:OY=RX*UY:OZ=RZ*UZ
RA=RA*DR:IN=IN*DR:WP=WP*DR:LT=LT*DR
MA=MA*DR:MM=MM*PI*2:m2=m2*2*PI:LN=LN*DR
YM=365.25:YT=5.34346e-315
WW=2*PI/YT
WE=2*PI+WW
J2=0.00108263
B=A*SQR(1-EC*EC)
SI=SIN(IN):CI=COS(IN)
PC=RE*A/(B*B):PC=1.5*J2*PC*PC*MM
QD=-PC*CI
WD=PC*(5*CI*CI-1)/2
DC=(m2/MM)/3
YG=1985:G0=99.6113
M0=365.929:MD=5.29966e-315
IS=23.4412*DR:CNS=COS(IS):SNS=SIN(IS)
E1=5.27427e-315:E2=0.00034922:E3=5.06e-06
TG=INT((ye-1)*YM)-INT((YG-1)*YM)+TE
GE=G0*DR+TG*WE
MRSE=G0*DR+TG*WW+PI
ME=(M0+MD*TG)*DR
RETURN
SATVEC:
T=(INT((YR-1)*YM)-INT((ye-1)*YM))+(TN-TE)
DT=DC*T/2:KD=1-4*DT:KP=1+7*DT
M=MA+MM*T*(1+3*DT)
WR=INT(M/(2*PI))
M=M-WR*2*PI
RN=RV+WR
EA=M
NLOOP:
C=COS(EA):S=SIN(EA)
DNOM=1-EC*C
DE=(EA-EC*S-M)/DNOM
EA=EA-DE
IF ABS(DE)>0.002 THEN NLOOP
C=COS(EA):S=SIN(EA)
RGC=A*(1-EC*C)*KD
SX=A*(C-EC)*KD:TA=-COS(LT):XA=TA*COS(LN)
SY=B*S*KD:YA=TA*SIN(LN):ZA=-SIN(LT)
W=WP+WD*T*KP:C=COS(W):S=SIN(W)
x=SX*C-SY*S:TA=XA:XA=TA*C-YA*S
Y=SX*S+SY*C:YA=TA*S+YA*C
Z=Y*SI:TA=ZA:ZA=YA*SI+TA*CI:QZ=ZA
Y=Y*CI:YA=YA*CI-TA*SI:QY=YA
QX=XA
R0=RA+QD*T*KP
GA=GE+WE*T
Q=R0-GA
C=COS(Q):S=SIN(Q)
SX=x*C-Y*S:TA=XA:XA=TA*C-YA*S
SY=x*S+Y*C:YA=TA*S+YA*C
SZ=Z
C=COS(R0):S=SIN(R0)
TX=x*C-Y*S:TA=QX:QX=TA*C-QY*S
TY=x*S+Y*C:QY=TA*S+QY*C
TZ=Z
MX=S*SI:MY=-C*SI:MZ=CI
RETURN
SUNVEC:
MS=ME+(MD*T)*DR
TS=MRSE+WW*T+E1*SIN(MS)+E2*SIN(2*MS)+E3*SIN(3*MS)
C=COS(TS):S=SIN(TS)
PX=C:PY=S*CNS:PZ=S*SNS
CSA=QX*PX+QY*PY+QZ*PZ
ILL=SQR(1-CSA*CSA)
TX=TX/RGC:TY=TY/RGC:TZ=TZ/RGC
CUA=-(TX*PX+TY*PY+TZ*PZ)
UMD=RGC*SQR(1-CUA*CUA)/RE
F=(PX*MX+PY*MY+PZ*MZ)
SEL=ATN(F/SQR(-F*F+1))
IF CUA>0 THEN ECL$=" + "
IF CUA<0 THEN ECL$=" - "
IF UMD<=1 AND CUA>=0 THEN ECL$="ECL"
RETURN
RANGEVEC:
RX=SX-OX:RY=SY-OY:RZ=SZ-OZ
R=SQR(RX*RX+RY*RY+RZ*RZ)
RX=RX/R:RY=RY/R:RZ=RZ/R
U=RX*UX+RY*UY+RZ*UZ
E=RX*EX+RY*EY+RZ*EZ
N=RX*NX+RY*NY+RZ*NZ
AZ=RD*(ATN(E/N))
IF N<0 THEN AZ=AZ+180
IF AZ<0 THEN AZ=AZ+360
G=ATN(U/SQR(U*U+1))
EL=RD*G
H=-(XA*RX+YA*RY+ZA*RZ)
H0=-ATN(H/SQR(-H*H+1))+5.30277e-315
SQ=RD*H0
RETURN
DATAOUT:
GOSUB DAYCON:P=JD:GOSUB STRCON :DAT$=x$+" "+P$
P=MU:GOSUB STRCON: DAT$=DAT$+"/"+P$
P=YX:GOSUB STRCON: DAT$=DAT$+"/"+P$
P=HR:GOSUB STRCON: DAT$=DAT$+" "+P$
P=MIN:GOSUB STRCON: DAT$=DAT$+":"+P$
R=INT(R+0.5):EL=INT(EL+0.5):AZ=INT(AZ+0.5)
SQ=INT(SQ+0.5):ILL=INT((100*ILL)+0.5)
UMD=(INT((100*UMD)+0.5))/100
M=INT(M*128/PI):SEL=INT((RD*(SEL)+0.5))
IF sat$="OSCAR-10" THEN MD$="N/A":GOTO JUMP
IF M=0 THEN MD$="PER":GOTO JUMP
IF M>=A0 AND M<=A1 THEN MD$=" B ": GOTO JUMP
IF M>=A2 AND M<=A3 THEN MD$=" B ": GOTO JUMP
IF M>=A4 AND M<=A5 THEN MD$="J-L": GOTO JUMP
IF M>=A6 AND M<=A7 THEN MD$=" * ": GOTO JUMP
IF M>=A8 AND M<=A9 THEN MD$=" - ": GOTO JUMP
MD$="OFF"
JUMP:
IF RN<>OL THEN OL=RN:GOSUB PRNHD
IF QA$="Y" THEN GOSUB PRNOUT
GM$=RIGHT$(DAT$,5)
PRINT DY;TAB(7);GM$;
PRINT TAB(15);
PRINT USING "###";AZ;
PRINT TAB(20);
PRINT USING "##";EL;
PRINT TAB(25);
PRINT USING "###";SQ;
PRINT TAB(30);
PRINT USING "###";M;
PRINT TAB(35);
PRINT USING "#####";R;
PRINT TAB(45);ECL$;SPC(3);MD$
RETURN
PRNHD:
CLS:PRINT
PRINT "Satellite: ";sat$;" Run Calculated on ";MID$(DATE$,4,2);"/";LEFT$(DATE$,2);"/";RIGHT$(DATE$,2)
PRINT " at ";LEFT$(TIME$,5)
PRINT "Year: ";YR;" Orbit: ";RN
PRINT "Solar illumination: ";ILL;"% Solar elevation: ";SEL;" degrees"
PRINT " DAY HH:MM AZ EL SQ MA RANGE ECL Mode"
PRINT "-------------------------------------------------------"
IF QA$="Y" THEN GOSUB HDPRN : RETURN
IF QA$="N" THEN RETURN
SETUPVAR:
PI=5.30795e-315:RD=180/PI:DR=1/RD
OLDRN=0
RETURN
TITLE:
CLS:PRINT
PRINT " ***** PLAN 10-13 *****"
PRINT
PRINT " Location: "LC$;" Lat: ";RD*LA;" Lon: ";RD*LO;" (east)"
PRINT " Ephemeris dated: " ;ye;" Day: ";INT(TE)
PRINT
PRINT " Satellite attitude: Lat: ";RD*LT;" Lon: ";RD*LN
PRINT
PRINT " Update satellite lat/lon via satellite data option":PRINT
RETURN
STRCON:
P$=CHR$(48+INT(P/10))+CHR$(48+P-10*INT(P/10))
RETURN
REM Returns three character printable string not used in this version!
P$=CHR$(48+INT(P/100))
RETURN
END
DAYCON:
JD=INT((YZ-1)*365.25)+DY+428:DX=(JD+5)-(7*INT((JD+5)/7))+1
YX=INT((JD-122.1)/365.25):JD=JD-INT(YX*365.25)
MU=INT(JD/30.6001):JD=JD-INT(MU*30.6001)
MU=MU-1
IF MU>12 THEN
MU=MU-12
YX=YX+1
END IF
x$=MID$(DD$,3*DX+1,3)
RETURN
PRNOUT:
LPRINT DAT$;TAB(25);
LPRINT USING "###";AZ;
LPRINT TAB(30);
LPRINT USING "##";EL;
LPRINT TAB(35);
LPRINT USING "##";SQ;
LPRINT TAB(40);
LPRINT USING "###";M;
LPRINT TAB(45);
LPRINT USING "#####";R;
LPRINT TAB(51);
LPRINT USING "##.##";UMD;
LPRINT TAB(58);ECL$;TAB(64);MD$
RETURN
HDPRN:
LPRINT
LPRINT" Day#";DY;" Orbit#";RN;" ILL:";ILL;"% ";
LPRINT"Solar El:";SEL;"Degrees"
LPRINT"-------------------------------------------------------------------"
LPRINT"DAY DATE HH:MM AZ EL SQ MA RANGE UMD ECL MODE";
LPRINT"-------------------------------------------------------------------"
RETURN
jump1:
WINDOW CLOSE 2
CHAIN "df0:satellites/MENU"
jump2:
WINDOW CLOSE 2
CHAIN "df0:satellites/setloc"